{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = pd.read_csv('air_data.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MEMBER_NO</th>\n",
       "      <th>FFP_DATE</th>\n",
       "      <th>FIRST_FLIGHT_DATE</th>\n",
       "      <th>GENDER</th>\n",
       "      <th>FFP_TIER</th>\n",
       "      <th>WORK_CITY</th>\n",
       "      <th>WORK_PROVINCE</th>\n",
       "      <th>WORK_COUNTRY</th>\n",
       "      <th>AGE</th>\n",
       "      <th>LOAD_TIME</th>\n",
       "      <th>...</th>\n",
       "      <th>ADD_Point_SUM</th>\n",
       "      <th>Eli_Add_Point_Sum</th>\n",
       "      <th>L1Y_ELi_Add_Points</th>\n",
       "      <th>Points_Sum</th>\n",
       "      <th>L1Y_Points_Sum</th>\n",
       "      <th>Ration_L1Y_Flight_Count</th>\n",
       "      <th>Ration_P1Y_Flight_Count</th>\n",
       "      <th>Ration_P1Y_BPS</th>\n",
       "      <th>Ration_L1Y_BPS</th>\n",
       "      <th>Point_NotFlight</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>54993</td>\n",
       "      <td>2006/11/02</td>\n",
       "      <td>2008/12/24</td>\n",
       "      <td>男</td>\n",
       "      <td>6</td>\n",
       "      <td>.</td>\n",
       "      <td>北京</td>\n",
       "      <td>CN</td>\n",
       "      <td>31.0</td>\n",
       "      <td>2014/03/31</td>\n",
       "      <td>...</td>\n",
       "      <td>39992</td>\n",
       "      <td>114452</td>\n",
       "      <td>111100</td>\n",
       "      <td>619760</td>\n",
       "      <td>370211</td>\n",
       "      <td>0.509524</td>\n",
       "      <td>0.490476</td>\n",
       "      <td>0.487221</td>\n",
       "      <td>0.512777</td>\n",
       "      <td>50</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>28065</td>\n",
       "      <td>2007/02/19</td>\n",
       "      <td>2007/08/03</td>\n",
       "      <td>男</td>\n",
       "      <td>6</td>\n",
       "      <td>NaN</td>\n",
       "      <td>北京</td>\n",
       "      <td>CN</td>\n",
       "      <td>42.0</td>\n",
       "      <td>2014/03/31</td>\n",
       "      <td>...</td>\n",
       "      <td>12000</td>\n",
       "      <td>53288</td>\n",
       "      <td>53288</td>\n",
       "      <td>415768</td>\n",
       "      <td>238410</td>\n",
       "      <td>0.514286</td>\n",
       "      <td>0.485714</td>\n",
       "      <td>0.489289</td>\n",
       "      <td>0.510708</td>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>55106</td>\n",
       "      <td>2007/02/01</td>\n",
       "      <td>2007/08/30</td>\n",
       "      <td>男</td>\n",
       "      <td>6</td>\n",
       "      <td>.</td>\n",
       "      <td>北京</td>\n",
       "      <td>CN</td>\n",
       "      <td>40.0</td>\n",
       "      <td>2014/03/31</td>\n",
       "      <td>...</td>\n",
       "      <td>15491</td>\n",
       "      <td>55202</td>\n",
       "      <td>51711</td>\n",
       "      <td>406361</td>\n",
       "      <td>233798</td>\n",
       "      <td>0.518519</td>\n",
       "      <td>0.481481</td>\n",
       "      <td>0.481467</td>\n",
       "      <td>0.518530</td>\n",
       "      <td>26</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>21189</td>\n",
       "      <td>2008/08/22</td>\n",
       "      <td>2008/08/23</td>\n",
       "      <td>男</td>\n",
       "      <td>5</td>\n",
       "      <td>Los Angeles</td>\n",
       "      <td>CA</td>\n",
       "      <td>US</td>\n",
       "      <td>64.0</td>\n",
       "      <td>2014/03/31</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>34890</td>\n",
       "      <td>34890</td>\n",
       "      <td>372204</td>\n",
       "      <td>186100</td>\n",
       "      <td>0.434783</td>\n",
       "      <td>0.565217</td>\n",
       "      <td>0.551722</td>\n",
       "      <td>0.448275</td>\n",
       "      <td>12</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>39546</td>\n",
       "      <td>2009/04/10</td>\n",
       "      <td>2009/04/15</td>\n",
       "      <td>男</td>\n",
       "      <td>6</td>\n",
       "      <td>贵阳</td>\n",
       "      <td>贵州</td>\n",
       "      <td>CN</td>\n",
       "      <td>48.0</td>\n",
       "      <td>2014/03/31</td>\n",
       "      <td>...</td>\n",
       "      <td>22704</td>\n",
       "      <td>64969</td>\n",
       "      <td>64969</td>\n",
       "      <td>338813</td>\n",
       "      <td>210365</td>\n",
       "      <td>0.532895</td>\n",
       "      <td>0.467105</td>\n",
       "      <td>0.469054</td>\n",
       "      <td>0.530943</td>\n",
       "      <td>39</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 44 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   MEMBER_NO    FFP_DATE FIRST_FLIGHT_DATE GENDER  FFP_TIER    WORK_CITY  \\\n",
       "0      54993  2006/11/02        2008/12/24      男         6            .   \n",
       "1      28065  2007/02/19        2007/08/03      男         6          NaN   \n",
       "2      55106  2007/02/01        2007/08/30      男         6            .   \n",
       "3      21189  2008/08/22        2008/08/23      男         5  Los Angeles   \n",
       "4      39546  2009/04/10        2009/04/15      男         6           贵阳   \n",
       "\n",
       "  WORK_PROVINCE WORK_COUNTRY   AGE   LOAD_TIME  ...  ADD_Point_SUM  \\\n",
       "0            北京           CN  31.0  2014/03/31  ...          39992   \n",
       "1            北京           CN  42.0  2014/03/31  ...          12000   \n",
       "2            北京           CN  40.0  2014/03/31  ...          15491   \n",
       "3            CA           US  64.0  2014/03/31  ...              0   \n",
       "4            贵州           CN  48.0  2014/03/31  ...          22704   \n",
       "\n",
       "   Eli_Add_Point_Sum  L1Y_ELi_Add_Points  Points_Sum  L1Y_Points_Sum  \\\n",
       "0             114452              111100      619760          370211   \n",
       "1              53288               53288      415768          238410   \n",
       "2              55202               51711      406361          233798   \n",
       "3              34890               34890      372204          186100   \n",
       "4              64969               64969      338813          210365   \n",
       "\n",
       "   Ration_L1Y_Flight_Count  Ration_P1Y_Flight_Count  Ration_P1Y_BPS  \\\n",
       "0                 0.509524                 0.490476        0.487221   \n",
       "1                 0.514286                 0.485714        0.489289   \n",
       "2                 0.518519                 0.481481        0.481467   \n",
       "3                 0.434783                 0.565217        0.551722   \n",
       "4                 0.532895                 0.467105        0.469054   \n",
       "\n",
       "  Ration_L1Y_BPS  Point_NotFlight  \n",
       "0       0.512777               50  \n",
       "1       0.510708               33  \n",
       "2       0.518530               26  \n",
       "3       0.448275               12  \n",
       "4       0.530943               39  \n",
       "\n",
       "[5 rows x 44 columns]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.head(5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 人工特征分类\n",
    "基本信息\n",
    "\n",
    "乘客（与航空公司相关）信息\n",
    "\n",
    "积分信息"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### LCRFM\n",
    "L:客户关系市场（是不是老客户）\n",
    "\n",
    "C:享受折扣率（反应客户价值）\n",
    "\n",
    "R:上次消费间隔\n",
    "\n",
    "F:消费频率\n",
    "\n",
    "M:飞行里程／消费额"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 预处理与特征工程\n",
    "根据ＬＣＲＦＭ直接提取"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "#无重复项\n",
    "dup = data[data['MEMBER_NO'].duplicated()] "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['MEMBER_NO', 'FFP_DATE', 'FIRST_FLIGHT_DATE', 'GENDER', 'FFP_TIER',\n",
       "       'WORK_CITY', 'WORK_PROVINCE', 'WORK_COUNTRY', 'AGE', 'LOAD_TIME',\n",
       "       'FLIGHT_COUNT', 'BP_SUM', 'EP_SUM_YR_1', 'EP_SUM_YR_2', 'SUM_YR_1',\n",
       "       'SUM_YR_2', 'SEG_KM_SUM', 'WEIGHTED_SEG_KM', 'LAST_FLIGHT_DATE',\n",
       "       'AVG_FLIGHT_COUNT', 'AVG_BP_SUM', 'BEGIN_TO_FIRST', 'LAST_TO_END',\n",
       "       'AVG_INTERVAL', 'MAX_INTERVAL', 'ADD_POINTS_SUM_YR_1',\n",
       "       'ADD_POINTS_SUM_YR_2', 'EXCHANGE_COUNT', 'avg_discount',\n",
       "       'P1Y_Flight_Count', 'L1Y_Flight_Count', 'P1Y_BP_SUM', 'L1Y_BP_SUM',\n",
       "       'EP_SUM', 'ADD_Point_SUM', 'Eli_Add_Point_Sum', 'L1Y_ELi_Add_Points',\n",
       "       'Points_Sum', 'L1Y_Points_Sum', 'Ration_L1Y_Flight_Count',\n",
       "       'Ration_P1Y_Flight_Count', 'Ration_P1Y_BPS', 'Ration_L1Y_BPS',\n",
       "       'Point_NotFlight'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "#import toad\n",
    "#toad.detect(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "MEMBER_NO                     0\n",
       "FFP_DATE                      0\n",
       "FIRST_FLIGHT_DATE             0\n",
       "GENDER                        3\n",
       "FFP_TIER                      0\n",
       "WORK_CITY                  2269\n",
       "WORK_PROVINCE              3248\n",
       "WORK_COUNTRY                 26\n",
       "AGE                         420\n",
       "LOAD_TIME                     0\n",
       "FLIGHT_COUNT                  0\n",
       "BP_SUM                        0\n",
       "EP_SUM_YR_1                   0\n",
       "EP_SUM_YR_2                   0\n",
       "SUM_YR_1                    551\n",
       "SUM_YR_2                    138\n",
       "SEG_KM_SUM                    0\n",
       "WEIGHTED_SEG_KM               0\n",
       "LAST_FLIGHT_DATE              0\n",
       "AVG_FLIGHT_COUNT              0\n",
       "AVG_BP_SUM                    0\n",
       "BEGIN_TO_FIRST                0\n",
       "LAST_TO_END                   0\n",
       "AVG_INTERVAL                  0\n",
       "MAX_INTERVAL                  0\n",
       "ADD_POINTS_SUM_YR_1           0\n",
       "ADD_POINTS_SUM_YR_2           0\n",
       "EXCHANGE_COUNT                0\n",
       "avg_discount                  0\n",
       "P1Y_Flight_Count              0\n",
       "L1Y_Flight_Count              0\n",
       "P1Y_BP_SUM                    0\n",
       "L1Y_BP_SUM                    0\n",
       "EP_SUM                        0\n",
       "ADD_Point_SUM                 0\n",
       "Eli_Add_Point_Sum             0\n",
       "L1Y_ELi_Add_Points            0\n",
       "Points_Sum                    0\n",
       "L1Y_Points_Sum                0\n",
       "Ration_L1Y_Flight_Count       0\n",
       "Ration_P1Y_Flight_Count       0\n",
       "Ration_P1Y_BPS                0\n",
       "Ration_L1Y_BPS                0\n",
       "Point_NotFlight               0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(62988,)"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 查看时候有些用户数据有问题\n",
    "# 这是我发现的，但不保证找到所有的无效数据\n",
    "# 其中和钱有关系的是 SUM_YR_1, SUM_YR_2\n",
    "data['SUM_YR_1'].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "#如果一个顾客的消费为 两年都是0 或者 NaN 我们就删除该顾客 （此类条目无意义）\n",
    "#先筛 nan\n",
    "data = data[data['SUM_YR_1'].notnull() & data['SUM_YR_2'].notnull()]\n",
    "#再筛 0\n",
    "filter_1 = data['SUM_YR_1'] != 0 #pd.series\n",
    "filter_2 = data['SUM_YR_2'] != 0\n",
    "data = data[filter_1 | filter_2] #series as filter"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(62044, 44)"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0        2006/11/02\n",
       "1        2007/02/19\n",
       "2        2007/02/01\n",
       "3        2008/08/22\n",
       "4        2009/04/10\n",
       "            ...    \n",
       "62974    2005/05/08\n",
       "62975    2008/11/16\n",
       "62976    2010/07/08\n",
       "62977    2012/12/20\n",
       "62978    2011/04/14\n",
       "Name: FFP_DATE, Length: 62044, dtype: object"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data['FFP_DATE']  #我们使用注册日期，来定义成我们的 L 客户时长"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 我们使用 2014/04/01 - FFP_DATE 来表示 L\n",
    "# 选取 2014/04/01 是因为该数据收集的时间最后在 2014/03\n",
    "import datetime\n",
    "load_time = datetime.datetime.strptime('2014/04/01', '%Y/%m/%d')\n",
    "ffp_dates = [datetime.datetime.strptime(ffp_date, '%Y/%m/%d') for ffp_date in data['FFP_DATE']]\n",
    "length_relation = [(load_time - ffp_date).days for ffp_date in ffp_dates]\n",
    "data['LEN_RELATION'] = length_relation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "count    62044.00000\n",
       "mean      1489.69109\n",
       "std        847.88092\n",
       "min        366.00000\n",
       "25%        736.00000\n",
       "50%       1279.00000\n",
       "75%       2183.00000\n",
       "max       3438.00000\n",
       "Name: LEN_RELATION, dtype: float64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data['LEN_RELATION'].describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "features = ['LEN_RELATION','FLIGHT_COUNT','avg_discount','SEG_KM_SUM','LAST_TO_END']\n",
    "data = data[features]\n",
    "features = ['L','F','C','M','R']\n",
    "data.columns = features"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "L    0\n",
       "F    0\n",
       "C    0\n",
       "M    0\n",
       "R    0\n",
       "dtype: int64"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.isnull().sum()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>62044.0</td>\n",
       "      <td>1489.691090</td>\n",
       "      <td>847.880920</td>\n",
       "      <td>366.000000</td>\n",
       "      <td>736.000000</td>\n",
       "      <td>1279.000000</td>\n",
       "      <td>2183.000000</td>\n",
       "      <td>3438.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>62044.0</td>\n",
       "      <td>11.971359</td>\n",
       "      <td>14.110619</td>\n",
       "      <td>2.000000</td>\n",
       "      <td>3.000000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>15.000000</td>\n",
       "      <td>213.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>62044.0</td>\n",
       "      <td>0.722180</td>\n",
       "      <td>0.184833</td>\n",
       "      <td>0.136017</td>\n",
       "      <td>0.613085</td>\n",
       "      <td>0.712162</td>\n",
       "      <td>0.809293</td>\n",
       "      <td>1.5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>62044.0</td>\n",
       "      <td>17321.694749</td>\n",
       "      <td>21052.728111</td>\n",
       "      <td>368.000000</td>\n",
       "      <td>4874.000000</td>\n",
       "      <td>10200.000000</td>\n",
       "      <td>21522.500000</td>\n",
       "      <td>580717.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>62044.0</td>\n",
       "      <td>172.532703</td>\n",
       "      <td>181.526164</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>29.000000</td>\n",
       "      <td>105.000000</td>\n",
       "      <td>260.000000</td>\n",
       "      <td>731.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     count          mean           std         min          25%           50%  \\\n",
       "L  62044.0   1489.691090    847.880920  366.000000   736.000000   1279.000000   \n",
       "F  62044.0     11.971359     14.110619    2.000000     3.000000      7.000000   \n",
       "C  62044.0      0.722180      0.184833    0.136017     0.613085      0.712162   \n",
       "M  62044.0  17321.694749  21052.728111  368.000000  4874.000000  10200.000000   \n",
       "R  62044.0    172.532703    181.526164    1.000000    29.000000    105.000000   \n",
       "\n",
       "            75%       max  \n",
       "L   2183.000000    3438.0  \n",
       "F     15.000000     213.0  \n",
       "C      0.809293       1.5  \n",
       "M  21522.500000  580717.0  \n",
       "R    260.000000     731.0  "
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.describe().T"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# transform数据 standardscaler\n",
    "# 也方便我们后续的雷达图制作\n",
    "import sklearn\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "s = sklearn.preprocessing.StandardScaler(with_mean=True,with_std = True)\n",
    "data = s.fit_transform(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(62044, 5)"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [],
   "source": [
    "data =pd.DataFrame(data, columns = features)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>count</th>\n",
       "      <th>mean</th>\n",
       "      <th>std</th>\n",
       "      <th>min</th>\n",
       "      <th>25%</th>\n",
       "      <th>50%</th>\n",
       "      <th>75%</th>\n",
       "      <th>max</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>L</th>\n",
       "      <td>62044.0</td>\n",
       "      <td>1.246004e-16</td>\n",
       "      <td>1.000008</td>\n",
       "      <td>-1.325304</td>\n",
       "      <td>-0.888919</td>\n",
       "      <td>-0.248493</td>\n",
       "      <td>0.817703</td>\n",
       "      <td>2.297875</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>F</th>\n",
       "      <td>62044.0</td>\n",
       "      <td>5.863547e-17</td>\n",
       "      <td>1.000008</td>\n",
       "      <td>-0.706662</td>\n",
       "      <td>-0.635793</td>\n",
       "      <td>-0.352316</td>\n",
       "      <td>0.214637</td>\n",
       "      <td>14.246736</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>62044.0</td>\n",
       "      <td>3.957894e-16</td>\n",
       "      <td>1.000008</td>\n",
       "      <td>-3.171335</td>\n",
       "      <td>-0.590238</td>\n",
       "      <td>-0.054200</td>\n",
       "      <td>0.471308</td>\n",
       "      <td>4.208258</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>M</th>\n",
       "      <td>62044.0</td>\n",
       "      <td>-1.026121e-16</td>\n",
       "      <td>1.000008</td>\n",
       "      <td>-0.805303</td>\n",
       "      <td>-0.591268</td>\n",
       "      <td>-0.338282</td>\n",
       "      <td>0.199539</td>\n",
       "      <td>26.761370</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>R</th>\n",
       "      <td>62044.0</td>\n",
       "      <td>4.397660e-17</td>\n",
       "      <td>1.000008</td>\n",
       "      <td>-0.944955</td>\n",
       "      <td>-0.790706</td>\n",
       "      <td>-0.372030</td>\n",
       "      <td>0.481848</td>\n",
       "      <td>3.076536</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     count          mean       std       min       25%       50%       75%  \\\n",
       "L  62044.0  1.246004e-16  1.000008 -1.325304 -0.888919 -0.248493  0.817703   \n",
       "F  62044.0  5.863547e-17  1.000008 -0.706662 -0.635793 -0.352316  0.214637   \n",
       "C  62044.0  3.957894e-16  1.000008 -3.171335 -0.590238 -0.054200  0.471308   \n",
       "M  62044.0 -1.026121e-16  1.000008 -0.805303 -0.591268 -0.338282  0.199539   \n",
       "R  62044.0  4.397660e-17  1.000008 -0.944955 -0.790706 -0.372030  0.481848   \n",
       "\n",
       "         max  \n",
       "L   2.297875  \n",
       "F  14.246736  \n",
       "C   4.208258  \n",
       "M  26.761370  \n",
       "R   3.076536  "
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.describe().T"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,\n",
       "       n_clusters=5, n_init=10, n_jobs=4, precompute_distances='auto',\n",
       "       random_state=None, tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 由于RFM天然将客户分为5类（8），K-means 逻辑上说比 DBSCAN 更好\n",
    "from sklearn.cluster import KMeans\n",
    "num_clusters = 5\n",
    "km = sklearn.cluster.KMeans(n_clusters = num_clusters, n_jobs =4)\n",
    "km.fit(data)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0, 0, 0, ..., 1, 4, 4])"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "km.labels_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>L</th>\n",
       "      <th>F</th>\n",
       "      <th>C</th>\n",
       "      <th>M</th>\n",
       "      <th>R</th>\n",
       "      <th>counts</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.483367</td>\n",
       "      <td>2.483102</td>\n",
       "      <td>0.309488</td>\n",
       "      <td>2.424128</td>\n",
       "      <td>-0.799431</td>\n",
       "      <td>5337</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.700307</td>\n",
       "      <td>-0.160806</td>\n",
       "      <td>-0.257353</td>\n",
       "      <td>-0.160517</td>\n",
       "      <td>-0.415048</td>\n",
       "      <td>24627</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.043887</td>\n",
       "      <td>-0.231313</td>\n",
       "      <td>2.174529</td>\n",
       "      <td>-0.235433</td>\n",
       "      <td>-0.001655</td>\n",
       "      <td>4231</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.160824</td>\n",
       "      <td>-0.086692</td>\n",
       "      <td>-0.156771</td>\n",
       "      <td>-0.094610</td>\n",
       "      <td>-0.377439</td>\n",
       "      <td>15734</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.313113</td>\n",
       "      <td>-0.573897</td>\n",
       "      <td>-0.175188</td>\n",
       "      <td>-0.536747</td>\n",
       "      <td>1.687015</td>\n",
       "      <td>12115</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          L         F         C         M         R  counts\n",
       "0  0.483367  2.483102  0.309488  2.424128 -0.799431    5337\n",
       "1 -0.700307 -0.160806 -0.257353 -0.160517 -0.415048   24627\n",
       "2  0.043887 -0.231313  2.174529 -0.235433 -0.001655    4231\n",
       "3  1.160824 -0.086692 -0.156771 -0.094610 -0.377439   15734\n",
       "4 -0.313113 -0.573897 -0.175188 -0.536747  1.687015   12115"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r1 = pd.Series(km.labels_).value_counts()\n",
    "r2 = pd.DataFrame(km.cluster_centers_)\n",
    "r = pd.concat([r2, r1], axis=1)\n",
    "r.columns = list(data.columns) + ['counts']\n",
    "r"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>R</th>\n",
       "      <th>F</th>\n",
       "      <th>M</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.944955</td>\n",
       "      <td>14.034129</td>\n",
       "      <td>26.761370</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.911902</td>\n",
       "      <td>9.073286</td>\n",
       "      <td>13.126970</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.889866</td>\n",
       "      <td>8.718940</td>\n",
       "      <td>12.653583</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-0.416102</td>\n",
       "      <td>0.781591</td>\n",
       "      <td>12.540723</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.922920</td>\n",
       "      <td>9.923716</td>\n",
       "      <td>13.898848</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          R          F          M\n",
       "0 -0.944955  14.034129  26.761370\n",
       "1 -0.911902   9.073286  13.126970\n",
       "2 -0.889866   8.718940  12.653583\n",
       "3 -0.416102   0.781591  12.540723\n",
       "4 -0.922920   9.923716  13.898848"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rfm = data[['R','F','M']]\n",
    "rfm.head(5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,\n",
       "       n_clusters=5, n_init=10, n_jobs=4, precompute_distances='auto',\n",
       "       random_state=None, tol=0.0001, verbose=0)"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "km.fit(rfm)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>R</th>\n",
       "      <th>F</th>\n",
       "      <th>M</th>\n",
       "      <th>counts</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>-0.300085</td>\n",
       "      <td>-0.433910</td>\n",
       "      <td>-0.433032</td>\n",
       "      <td>28484</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-0.768307</td>\n",
       "      <td>1.837004</td>\n",
       "      <td>1.753888</td>\n",
       "      <td>4984</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.629165</td>\n",
       "      <td>0.406123</td>\n",
       "      <td>0.391175</td>\n",
       "      <td>13967</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.647225</td>\n",
       "      <td>-0.563581</td>\n",
       "      <td>-0.524459</td>\n",
       "      <td>13461</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-0.865069</td>\n",
       "      <td>4.415992</td>\n",
       "      <td>4.478897</td>\n",
       "      <td>1148</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          R         F         M  counts\n",
       "0 -0.300085 -0.433910 -0.433032   28484\n",
       "1 -0.768307  1.837004  1.753888    4984\n",
       "2 -0.629165  0.406123  0.391175   13967\n",
       "3  1.647225 -0.563581 -0.524459   13461\n",
       "4 -0.865069  4.415992  4.478897    1148"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "r1 = pd.Series(km.labels_).value_counts()\n",
    "r2 = pd.DataFrame(km.cluster_centers_)\n",
    "rr = pd.concat([r2, r1], axis=1)\n",
    "rr.columns = list(rfm.columns) + ['counts']\n",
    "rr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 尝试 DBSCAN\n",
    "# from sklearn.cluster import DBSCAN\n",
    "\n",
    "# db = DBSCAN(eps=10, min_samples=2).fit(data.sample(10000))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {},
   "outputs": [],
   "source": [
    "# db.labels_"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 雷达图！！！"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.patches import Circle, RegularPolygon\n",
    "from matplotlib.path import Path\n",
    "from matplotlib.projections.polar import PolarAxes\n",
    "from matplotlib.projections import register_projection\n",
    "from matplotlib.spines import Spine\n",
    "from matplotlib.transforms import Affine2D\n",
    "\n",
    "def radar_factory(num_vars, frame='circle'):\n",
    "    \n",
    "    # 计算得到evenly-spaced axis angles\n",
    "    theta = np.linspace(0, 2*np.pi, num_vars, endpoint=False)\n",
    "\n",
    "    class RadarAxes(PolarAxes):\n",
    "\n",
    "        name = 'radar'\n",
    "        # 使用1条线段连接指定点\n",
    "        RESOLUTION = 1\n",
    "\n",
    "        def __init__(self, *args, **kwargs):\n",
    "            super().__init__(*args, **kwargs)\n",
    "            # 旋转绘图，使第一个轴位于顶部\n",
    "            self.set_theta_zero_location('N')\n",
    "            \n",
    "        def fill(self, *args, closed=True, **kwargs):\n",
    "            \"\"\"覆盖填充，以便默认情况下关闭该行\"\"\"\n",
    "            return super().fill(closed=closed, *args, **kwargs)\n",
    "\n",
    "        def plot(self, *args, **kwargs):\n",
    "            \"\"\"覆盖填充，以便默认情况下关闭该行\"\"\"\n",
    "            lines = super().plot(*args, **kwargs)\n",
    "            for line in lines:\n",
    "                self._close_line(line)\n",
    "\n",
    "        def _close_line(self, line):\n",
    "            x, y = line.get_data()\n",
    "            # FIXME: x[0], y[0] 处的标记加倍\n",
    "            if x[0] != x[-1]:\n",
    "                x = np.concatenate((x, [x[0]]))\n",
    "                y = np.concatenate((y, [y[0]]))\n",
    "                line.set_data(x, y)\n",
    "                \n",
    "        def set_varlabels(self, labels):\n",
    "            self.set_thetagrids(np.degrees(theta), labels)\n",
    "\n",
    "        def _gen_axes_patch(self):\n",
    "            # 轴必须以（0.5，0.5）为中心并且半径为0.5\n",
    "            # 在轴坐标中。\n",
    "            if frame == 'circle':\n",
    "                return Circle((0.5, 0.5), 0.5)\n",
    "            elif frame == 'polygon':\n",
    "                return RegularPolygon((0.5, 0.5), num_vars,\n",
    "                                      radius=.5, edgecolor=\"k\")\n",
    "            else:\n",
    "                raise ValueError(\"unknown value for 'frame': %s\" % frame)\n",
    "        \n",
    "        def _gen_axes_spines(self):\n",
    "            if frame == 'circle':\n",
    "                return super()._gen_axes_spines()\n",
    "            elif frame == 'polygon':\n",
    "                # spine_type 必须是'left'/'right'/'top'/'bottom'/'circle'.\n",
    "                spine = Spine(axes=self,\n",
    "                              spine_type='circle',\n",
    "                              path=Path.unit_regular_polygon(num_vars))\n",
    "                # unit_regular_polygon 给出以1为中心的半径为1的多边形\n",
    "                #（0，0），但我们希望以（0.5，\n",
    "                #   0.5）的坐标轴。\n",
    "                spine.set_transform(Affine2D().scale(.5).translate(.5, .5)\n",
    "                                    + self.transAxes)\n",
    "                return {'polar': spine}\n",
    "            else:\n",
    "                raise ValueError(\"unknown value for 'frame': %s\" % frame)\n",
    "\n",
    "    register_projection(RadarAxes)\n",
    "    return theta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "N = num_clusters\n",
    "theta = radar_factory(N, frame='polygon')\n",
    "\n",
    "data = r.to_numpy()\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(5, 5), nrows=1, ncols=1,\n",
    "                         subplot_kw=dict(projection='radar'))\n",
    "fig.subplots_adjust(wspace=0.25, hspace=0.20, top=0.85, bottom=0.05)\n",
    "\n",
    "# 去掉最后一列\n",
    "case_data = data[:, :-1]\n",
    "# 设置纵坐标不可见\n",
    "ax.get_yaxis().set_visible(False)\n",
    "# 图片标题\n",
    "title = \"LCRFM\"\n",
    "ax.set_title(title, weight='bold', size='medium', position=(0.5, 1.1),\n",
    "             horizontalalignment='center', verticalalignment='center')\n",
    "for d in case_data:\n",
    "    # 画边\n",
    "    ax.plot(theta, d)\n",
    "    # 填充颜色\n",
    "    ax.fill(theta, d, alpha=0.05)\n",
    "# 设置纵坐标名称\n",
    "ax.set_varlabels(features)\n",
    "\n",
    "# 添加图例\n",
    "labels = [\"CustomerCluster_\" + str(i) for i in range(1,6)]\n",
    "legend = ax.legend(labels, loc=(0.9, .75), labelspacing=0.1)\n",
    "plt.savefig('LCRFM.jpg')\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 360x360 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "theta = radar_factory(3, frame='polygon')\n",
    "\n",
    "data = rr.to_numpy()\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(5, 5), nrows=1, ncols=1,\n",
    "                         subplot_kw=dict(projection='radar'))\n",
    "fig.subplots_adjust(wspace=0.25, hspace=0.20, top=0.85, bottom=0.05)\n",
    "\n",
    "# 去掉最后一列\n",
    "case_data = data[:, :-1]\n",
    "# 设置纵坐标不可见\n",
    "ax.get_yaxis().set_visible(False)\n",
    "# 图片标题\n",
    "title = \"RFM\"\n",
    "ax.set_title(title, weight='bold', size='medium', position=(0.5, 1.1),\n",
    "             horizontalalignment='center', verticalalignment='center')\n",
    "for d in case_data:\n",
    "    # 画边\n",
    "    ax.plot(theta, d)\n",
    "    # 填充颜色\n",
    "    ax.fill(theta, d, alpha=0.05)\n",
    "# 设置纵坐标名称\n",
    "ax.set_varlabels(['R','F','M'])\n",
    "\n",
    "# 添加图例\n",
    "labels = [\"CustomerCluster_\" + str(i) for i in range(1,6)]\n",
    "legend = ax.legend(labels, loc=(0.9, .75), labelspacing=0.1)\n",
    "plt.savefig('RFM.jpg')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 总结报告"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 各类客户的LCRFM高低比较\n",
    "L, R, F, M, C    \n",
    "\n",
    "重要保持客户 cluster 1:\n",
    "\n",
    "4-1-5-5-4\n",
    "\n",
    "重要发展客户 cluster 3:\n",
    "\n",
    "3-4-2-2-5\n",
    "\n",
    "重要挽留客户 cluster 4:\n",
    "\n",
    "5-3-4-4-3\n",
    "\n",
    "一般客户    cluster 2:\n",
    "\n",
    "1-4-2-2-1\n",
    "\n",
    "低价值      cluster 5:\n",
    "\n",
    "2-5-1-1-2\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
